Dieser Discompiler erzeugt aus compilierten Visual Basic (VB) Programmen die kompletten Quelldateien, einschlie▀lich der Forms. Er soll in dieser Version nicht dazu dienen, fremde Programme zu knacken, sondern demonstrieren, wieviele Teile des Sourcecodes vom Compiler in die ausfⁿhrbaren Programme ⁿbernommen wurden. Ich halte dies fⁿr ein bedenkliches Zeichen, fⁿr welches Programm sind denn diese Informationen bestimmt? Das Laufzeitsystem ben÷tigt sie nicht, und doch wurden sie teilweise absichtlich in das Programm ⁿbernommen.
Die Installation des Discompilers ist einfach:
Kopieren Sie das Archiv in ein neues Verzeichnis (z.B. VBDIS) und packen Sie es aus. Wenn Sie dies bereits getan haben, finden Sie neben dem Programm VBDIS3.EXE noch einige Datenfiles, die fⁿr die Discompilierung ben÷tigt werden. Eine Installation ist nicht notwendig, der Discompiler ben÷tigt keine EintrΣge in WIN.INI usw.
Die Bedienung des Discompilers ist ebenfalls einfach:
- Programm starten, aus dem Menⁿ '╓ffnen' wΣhlen und das gewⁿnschte Programm angeben.
- Das Verzeichnis wΣhlen, in dem die Quellen erzeugt werden sollen. Mit 'Neu' kann ein neues Verzeichnis mit dem darⁿber angegebenen Namen erstellt werden. Der gewΣhte Ordner mu▀ vor dem Verlassen dieses Dialogs ge÷ffnet dargestellt sein!
- Nun legt der Discompiler los und erzeugt die Quellfiles, sofern es sich um ein Programm von VB 3.0 handelt. Sollten Sie versuchen, ein anderes Programm, den Discompiler selbst oder ein anderes geschⁿtztes Programm zu discompilieren, erscheint eine Fehlermeldung.
- Im ersten Durchlauf erzeugt der Discompiler mehrere BAS-Files im Textformat sowie die FRM-Files, diese allerdings im BinΣrformat. Sobald er fertig ist, rufen Sie VB mit dem erzeugten Makefile auf und speichern alle Forms ebenfalls im Textformat. Dieser Schritt ist leider notwendig, da die Erzeugung der Forms im Textformat ohne Mithilfe der Custom-Controls (VBX) oft nicht m÷glich ist. Speichern Sie dann das Projekt ab und verlassen Sie den Interpreter.
- Anschlie▀end wΣhlen Sie im Menⁿ des Discompilers 'Forms zusammenfⁿgen', und der Code wird an die Forms angehΣngt. (Geht natⁿrlich auch mit einem Editor, aber nicht so schnell).
- Fertig - das Programm kann nun im Interpreter gestartet werden.
WΣhrend der Discompilierung k÷nnen Fehler gemeldet werden, die (hoffentlich) abgefangen werden und das Programm nicht abstⁿrzen lassen. Bitte beachten Sie die Kommentare hierzu, die zugrundeliegenden Tabellen wurden ohne Disassemblierung des Laufzeitsystems erstellt, so da▀ sie nicht unbedingt komplett sind. Auch einige Konstruktionen in den Programmen k÷nnen zu Fehlern fⁿhren, sofern sie bislang noch nicht aufgetreten sind und daher nicht bekannt ist, wie sie zu behandeln sind.
Die Beschreibungen von Custom-Controls liegen in Datenfiles mit der Extension '300' (fⁿr VB 3.0). Sollte das Programm neben den mitgelieferten Controls weitere VBX-Dateien verwenden, kann der Discompiler diese natⁿrlich nicht richtig interpretieren. Hier hilft das Programm VBCtrl, das VBX-Dateien analysiert und fⁿr die Verwendung im Discompiler abspeichert. Wenn der Discompiler auf ein unbekanntes Control st÷▀t, k÷nnen Sie VBCtrl starten, die Beschreibung des Controls abspeichern und anschlie▀end weiter discompilieren.
Beim Starten des Programms kann der Interpreter einige Fehler finden, hauptsΣchlich fehlende oder falsche Variablentypen, sowie falsche Argumente beim Aufruf von Funktionen. Diese Angaben mⁿssen Sie selbst ermitteln und korrigieren, die Vergabe von Namen und Datentypen fⁿr die Variablen und Funktionen ist nur in der Profi-Version m÷glich. Beim Vergleich mit Ihrem Quellcode entdecken Sie m÷glicherweise fehlende Variablen und Konstanten, sowie seltsame Parameterlisten von Unterprogrammen (p,p,p); diese Symptome stammen alle von Variablen bzw. Unterprogrammen und Parametern, die im Programm garnicht verwendet werden, so da▀ der Discompiler die Datentypen nicht ermitteln kann.
Beachten Sie im Quellcode die Namen der Forms und Controls, die der Compiler in das ausfⁿhrbare Programm hineingepackt hat, und die exakte Einrⁿckung aller Zeilen, die ebenfalls mit viel Aufwand aus dem Quellcode ⁿbernommen wurde. Bei jeder Variablen wird peinlich genau vermerkt, ob sie im Quellcode mit oder ohne Typ-Kennzeichen angegeben wurde. Sie k÷nnen das mit eigenen Programmen ganz leicht austesten und die erzeugten Quellen mit Ihrem Code vergleichen.
VBCtrl - DAS Custom Control Tool
VBCtrl analysiert EXE- und VBX-Dateien und extrahiert die Properties und Events der darin gespeicherten Controls. Die Bedienung erfordert ein paar Kenntnisse, die hier im Schnelldurchgang vermittelt werden sollen.
Starten Sie VBCtrl und ÷ffnen Sie die gewⁿnschte Datei. Alle Dateien vom Typ VBX werden automatisch nΣher analysiert und es erscheint ein Fenster mit mehreren Listen. In der linken Liste sind alle m÷glichen Entrypoints der Datei aufgelistet. Ihre Aufgabe besteht nun darin, alle Prozeduren zu finden, die zu den Custom Controls geh÷ren.
In den meisten VBX sind die Control-Prozeduren am Namen xxxCTRLPROC zu erkennen (brav vom CDK abgeschrieben). WΣhlen Sie nun den ersten dieser Namen an. Daraufhin erscheint im mittleren Fenster eine Liste aller Verweise auf diese Prozedur, von denen eine die gesuchte Control-Tabelle sein sollte. Wenn Sie keinen entsprechenden Namen finden, oder wenn die vermeintlichen Tabellen nicht richtig interpretiert werden k÷nnen, probieren Sie der Reihe nach alle (unbenannten) Entrypoints, normalerweise werden Sie auch dann irgendwann einmal fⁿndig.
WΣhlen Sie nun aus dem mittleren Fenster eine Adresse aus, im rechten Fenster wird dann die vermutete Tabelle dargestellt. Bei Fehlermeldungen ist die Wahrscheinlichkeit sehr gering, da▀ Sie eine solche Tabelle gefunden haben. Achten Sie auf den Klassennamen (CN) und Default-Control-Namen (DN), hier sollten lesbare Texte erscheinen. Am ersten Eintrag k÷nnen Sie noch die VB-Version unterscheiden (100=VB1.0, 200=VB2.0, 300=VB3.0), hier sollte unbedingt einer dieser Werte stehen. Einzelheiten zu den angezeigten Werten lesen Sie bitte im CDK nach, jede Zeile entspricht einem Eintrag in der Control-Model Struktur, die Buchstaben am Anfang jeder Zeile sind Kⁿrzel fⁿr die entsprechenden Elemente in der Struktur. Bei mehreren Tabellen mit denselben Control-Namen wΣhlen Sie diejenige mit der h÷chsten Versionsnummer.
Mit dem Button oberhalb der rechten Liste ⁿbernehmen Sie alle Informationen, die zu diesem Steuerelement geh÷ren, in den Katalog, der vom Discompiler fⁿr die Behandlung des Steuerelements ben÷tigt werden. Dieser Katalog wird in einem weiteren Fenster angezeigt.
Die Anzeige der Properties und Events erm÷glicht kleinere Korrekturen, die Sie selbst bei Bedarf durchfⁿhren k÷nnen. Speziell in den Standard-Controls (die in VBRUN300 implementiert sind), fehlen die Namen der Parameter zu den Events, einige Datentypen sind nicht dokumentiert und mⁿssen von Hand nachgetragen werden. Hierzu dient das Edit-Feld ⁿber der Event-Liste, in das Sie die gewⁿnschten Parameter-Strings eintragen k÷nnen. Dies erfolgt am einfachsten ⁿber den Hilfe-Button, mit dem die Information zu dem aktuellen Event angezeigt wird. Dort k÷nnen Sie die Parameterliste ausschneiden und dann in das Edit-Feld einfⁿgen.
Die Standard-Properties sind alles andere als 'Standard', die Datentypen sind nirgends dokumentiert, und einige Namen fehlen. Dies sollte jedoch nicht weiters st÷ren, da diese FΣlle im Discompiler automatisch abgefangen werden bzw. die Properties ohne Namen in einem Programm ja garnicht vorkommen k÷nnen. Auch die Standard-Collections werden im Discompiler automatisch berⁿcksichtigt, und fⁿr Custom-Controls gibt es keine M÷glichkeit, Collections zu definieren oder zu verwenden. Sie sollten jedoch die mitgelieferten Beschreibungen der Standard-Controls (VBRUN300.300) m÷glichst nicht verΣndern, da dort Informationen gespeichert sein k÷nnen, deren Erzeugung mit VBCtrl nicht garantiert werden kann.
Wenn Sie so alle Controls einer VBX-Datei gefunden und katalogisiert haben, speichern Sie die Definitionen ab. D